/**
 * 添加拦截器：
 *  拦截 request 请求
 * 拦截 uploadFile 文件上传
 * 
 * 1. 非 http 开头的需拼接地址
 * 2. 请求超时
 * 3. 添加小程序端请求标识
 * 4. 添加 token 请求头标识
 */

import config from "@/config"

// 添加拦截器
const httpIntercepter = {
  invoke(options: UniApp.RequestOptions) {
    
    if (!options.url.startsWith('http')) {
      options.url = config.serviceUrl + options.url
    }
    options.timeout = 10000

  },
}


uni.addInterceptor('request', httpIntercepter)
uni.addInterceptor('uploadFile', httpIntercepter)



const http = <T>(options: UniApp.RequestOptions) => {
  return new Promise<Result<T>>((resolve, reject) => {

    uni.request({
      ...options,
      // 响应成功
      async success(res) {
        let data: Result<T>
        data = res.data as Result<T>
        if (data.statusCode >= 300) {
          // 通用错误，调用 reject
          uni.showToast({
            icon: 'none', title: data.errors ?? '请求错误'
          })
          reject(res)
          return
        }
        resolve(data)

      },
      fail(err) {
        // 网络错误，调用 reject
        uni.showToast({
          icon: 'none', title: '网络错误，请换个网络试试'
        })
        reject(err)
      }

    })
  })
}

export default http
